package editorsvg.editor.herramientas;

import editorsvg.editor.cursores.Cursores;
import editorsvg.editor.vista.EditorDocumento;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;

/**
 * Herramienta para realizar zoom sobre la pagina (alejar y acercar el punto de vista).
 * @author Jorge Berjano
 */
public class HerramientaZoom2 extends HerramientaBase {

    private EditorDocumento editor;
    private Point puntoBase;
    private Point puntoActual;
//    private Rectangle rectangulo;
    private BasicStroke stroke;

    public HerramientaZoom2(EditorDocumento editor) {
        this.editor = editor;
        stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,
                0, new float[]{2f, 2f}, 0);

    }

    @Override
    public boolean pulsado(MouseEvent e) {
        puntoBase = e.getPoint();
        return false;
    }

    @Override
    public boolean arrastrando(MouseEvent e) {
        puntoActual = e.getPoint();
        return true;
    }
    
    @Override
    public boolean liberado(MouseEvent e) {
        puntoActual = e.getPoint();
        if (puntoActual.equals(puntoBase)) {
            editor.zoom(e.getButton() == MouseEvent.BUTTON1 ? 2 : 0.5, e.getPoint());
        } else {
            editor.encuadrarVistaPixels(crearRectangulo());
            editor.repintar(false);
        }
        puntoBase = null;
        puntoActual = null;
        return true;
    }
    
//    private void actualizarRectangulo(Point punto) {
//        int ancho = punto.x - rectangulo.getLocation().x;
//        int alto = punto.y - rectangulo.getLocation().y;
//        rectangulo.setSize(ancho, alto);
//    }

    @Override
    public Cursor getCursor() {
        return Cursores.LUPA.getCursor();
    }

    @Override
    public void pintarEnPixeles(Graphics2D graphics) {
        if (puntoActual != null && puntoBase != null) {
            graphics.setColor(Color.BLACK);
            graphics.setXORMode(Color.WHITE);
            graphics.setStroke(stroke);
            graphics.draw(crearRectangulo());
        }
    }

    private Rectangle crearRectangulo() {
        int x = Math.min(puntoActual.x, puntoBase.x);
        int y = Math.min(puntoActual.y, puntoBase.y);
        int ancho = Math.abs(puntoActual.x - puntoBase.x);
        int alto = Math.abs(puntoActual.y - puntoBase.y);
        return new Rectangle(x, y, ancho, alto);
    }

}
